//package com.jinhua.config;
//
//import com.fasterxml.jackson.annotation.JsonIgnore;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//
//import java.io.Serializable;
//
///**
// * Copyright
// *
// * @Author WuHuang
// * @Date 2022/8/25
// */
//@Data
//@Slf4j
//@ApiModel(description = "通用响应结构")
//public class HttpResult <T> implements Serializable {
//    private static final long serialVersionUID = -105653695825880271L;
//
//    private static class CodeTable {
//        public final static String SUCCESS = BaseErrorCode.Success.name();
//        public final static String FAIL = BaseErrorCode.FAIL.name();
//    }
//
//    /**
//     * 数据
//     */
//    @ApiModelProperty("响应数据")
//    T data;
//    /**
//     * 状态码
//     */
//    @ApiModelProperty("状态码")
//    String code = "";
//    /**
//     * 错误消息
//     */
//    @ApiModelProperty("错误消息")
//    String msg = "";
//
//    /**
//     * 错误消息
//     */
//    @ApiModelProperty("系统异常信息")
//    String errorMsg = "";
//
//    /**
//     * 调用链追踪id
//     */
//    @ApiModelProperty("调用链追踪id")
//    String traceId = "";
//
//    /**
//     * 调用链追踪id(兼容)
//     */
//    @ApiModelProperty("调用链追踪id(兼容)")
//    String requestId = "";
//
//    /**
//     * 响应时间，单位ms
//     */
//    @ApiModelProperty("响应时间，单位ms")
//    @Deprecated
//    Integer rt = 0;
//
//
//    /**
//     * 构造函数，反序列化使用，不建议直接使用
//     */
//    public HttpResult() {
//    }
//
//    private HttpResult(T data) {
//        this(data, CodeTable.SUCCESS, "");
//    }
//
//    private HttpResult(T data, String code, String msg) {
//        this.data = data;
//        this.code = code;
//        this.msg = msg;
//    }
//
//    /**
//     *  返回无结果
//     * @return
//     */
//    public static  HttpResult<Void> success() {
//        return new HttpResult<>();
//    }
//
//    /**
//     * 快速构建成功返回结果
//     *
//     * @param data 数据
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> success(T data) {
//        return new HttpResult<>(data);
//    }
//
//    /**
//     * 快速构建失败返回结果
//     *
//     * @param data 数据
//     * @param msg  错误msg
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> fail(T data, String msg) {
//        return new HttpResult<>(data, CodeTable.FAIL, msg);
//    }
//
//    /**
//     * 快速构建失败返回结果
//     *
//     * @param msg 错误msg
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> fail(String msg) {
//        return fail(null, msg);
//    }
//
//    /**
//     * 快速构建失败返回结果
//     *
//     * @param err 错误 ErrorCode
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> fail(ErrorCode err) {
//        return fail(null, err);
//    }
//
//    /**
//     * 快速构建失败返回结果
//     *
//     * @param data 数据
//     * @param err  错误 ErrorCode
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> fail(T data, ErrorCode err) {
//        return new HttpResult<>(data, err.getCode(), err.getDescription());
//    }
//
//
//    /**
//     * 构建返回结果
//     *
//     * @param data 数据
//     * @param code 错误码
//     * @param msg  错误消息
//     * @param <T>
//     * @return 返回结果
//     */
//    public static <T> HttpResult<T> build(T data, String code, String msg) {
//        return new HttpResult<>(data, code, msg);
//    }
//
//    /**
//     * 客户端ip
//     */
//    @ApiModelProperty("客户端ip")
//    String clientIp;
//
//
//    /**
//     * 严禁忽略, 这个值业务有在用!!!
//     */
//    @ApiModelProperty(hidden = true)
//    public boolean isSuccess() {
//        return StringUtils.equalsIgnoreCase(CodeTable.SUCCESS, this.code);
//    }
//
//    /**
//     * 获取结果，并忽略错误
//     * 会打印warn级别日志
//     *
//     * @return data
//     */
//    @ApiModelProperty(hidden = true)
//    @JsonIgnore
//    public T getIgnoreError() {
//        if (this.isSuccess()) {
//            return this.data;
//        }
//        log.debug("rpc error be ignored. result: {}", this.toString());
//        return null;
//    }
//
//    @Override
//    public String toString() {
//        return "HttpResult{" +
//                "data=" + data +
//                ", code=" + code +
//                ", msg='" + msg + '\'' +
//                ", errorMsg='" + errorMsg + '\'' +
//                ", traceId='" + traceId + '\'' +
//                ", requestId='" + requestId + '\'' +
//                '}';
//    }
//}
